package com.braveman.im.utils;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.os.Build;
import android.support.v4.app.NotificationCompat;

import com.braveman.im.R;

import java.util.Random;
import java.util.UUID;

/**
 * Created by huangtao on 15/12/29.
 */
public class NotificationUtils {


    private static final String NOTIFICATION_MSG_SOUND = "notification_msg_sound";
    private static final String NOTIFICATION_MSG_VARIB = "notification_msg_varib";
//    private static NotificationManager mManager;
    private static AudioManager mAudioManager;

    private static final int SmallIcon = R.mipmap.ic_launcher;
    public static final int NotificationNumber = 1;
    private static NotificationManager mManager;
    private static NotificationCompat.Builder mBuilder;
    private static final Random RANDOM = new Random();

    public static void show(Context context, int icon,
                            String title, String text, Intent intent, boolean hasSound) {
        if (mManager == null) {
            mManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);

        if (null != title) {
            builder.setContentTitle(title);
        }

        if (null != text) {
            builder.setContentText(text);
        }

        builder.setSmallIcon(icon).setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis()).setAutoCancel(true);

        int requestCode = UUID.randomUUID().hashCode();
        PendingIntent contentIntent = PendingIntent.getActivity(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(contentIntent);

        Notification n = builder.build();
        setSoundAndVarib(context, n, hasSound);
        mManager.notify(requestCode, n);
    }

    public static void setSoundAndVarib(Context context, Notification notification, boolean hasSound) {
        if (mAudioManager == null) {
            mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        }
        switch (mAudioManager.getRingerMode()) {//获取系统设置的铃声模式
            case AudioManager.RINGER_MODE_SILENT://静音模式，值为0，这时候不震动，不响铃
                notification.sound = null;
                notification.vibrate = null;
                break;
            case AudioManager.RINGER_MODE_VIBRATE://震动模式，值为1，这时候震动，不响铃
                notification.sound = null;
                notification.defaults |= Notification.DEFAULT_VIBRATE;
                break;
            case AudioManager.RINGER_MODE_NORMAL://常规模式，值为2，分两种情况：1_响铃但不震动，2_响铃+震动
                boolean soundSetting = hasSound;
                boolean vibrateSetting = soundSetting;

                if (soundSetting && vibrateSetting) {//响铃并震动
                    notification.defaults |= Notification.DEFAULT_VIBRATE;
                    notification.defaults |= Notification.DEFAULT_SOUND;
                } else if(!soundSetting && !vibrateSetting){
                    notification.defaults = Notification.DEFAULT_LIGHTS;
                }else {
                    if (soundSetting) {//无值，为空，不播放铃声
                        notification.defaults = Notification.DEFAULT_SOUND;
                    }

                    if (vibrateSetting){
                        notification.defaults = Notification.DEFAULT_VIBRATE;
                    }
                }
                break;
            default:
                break;
        }
    }

    public static void send(Context context ,Intent intent,int icon,String title, String text ,int nunber,int notification_flag){
        NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        int sdkInt = Build.VERSION.SDK_INT;
//        L.i("notification", "sdkInt:" + sdkInt);
        if (sdkInt >= 16){
            PendingIntent pendingIntent16 = PendingIntent.getActivity(context, UUID.randomUUID().hashCode(),
                    intent , 0);
            // 通过Notification.Builder来创建通知，注意API Level
            // API16之后才支持
            Notification notify16 = new Notification.Builder(context)
                    .setSmallIcon(icon)
                    .setTicker(text)
                    .setContentTitle(title)
                    .setContentText(text)
//                    .setPriority(Notification.PRIORITY_MAX) //设置该通知优先级
                    .setContentIntent(pendingIntent16)
//                    .setNumber(nunber)
                    .build(); // 需要注意build()是在API
            // level16及之后增加的，API11可以使用getNotificatin()来替代
            notify16.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时，通知将被清除。
            manager.notify(notification_flag, notify16);// 步骤4：通过通知管理器来发起通知。如果id不同，则每click，在status哪里增加一个提示


        }else if (sdkInt < 16 && sdkInt >= 11){
            PendingIntent pendingIntent11 = PendingIntent.getActivity(context, UUID.randomUUID().hashCode(),
                    intent, 0);
            // 通过Notification.Builder来创建通知，注意API Level
            // API11之后才支持
            Notification notify11 = new Notification.Builder(context)
                    .setSmallIcon(icon) // 设置状态栏中的小图片，尺寸一般建议在24×24，这个图片同样也是在下拉状态栏中所显示，如果在那里需要更换更大的图片，可以使用setLargeIcon(Bitmap
                    // icon)
                    .setTicker(text)// 设置在status
                    // bar上显示的提示文字
                    .setContentTitle(title)// 设置在下拉status
                    // bar后Activity，本例子中的NotififyMessage的TextView中显示的标题
                    .setContentText(text)// TextView中显示的详细内容
                    .setContentIntent(pendingIntent11) // 关联PendingIntent
//                    .setNumber(nunber) // 在TextView的右方显示的数字，可放大图片看，在最右侧。这个number同时也起到一个序列号的左右，如果多个触发多个通知（同一ID），可以指定显示哪一个。
                    .getNotification(); // 需要注意build()是在API level
            // 16及之后增加的，在API11中可以使用getNotificatin()来代替
            notify11.flags |= Notification.FLAG_AUTO_CANCEL;
            manager.notify(notification_flag, notify11);
        }else {//已废弃，不过兼容所有版本的通知
            // 在Android进行通知处理，首先需要重系统哪里获得通知管理器NotificationManager，它是一个系统Service。


            // 创建一个PendingIntent，和Intent类似，不同的是由于不是马上调用，需要在下拉状态条出发的activity，所以采用的是PendingIntent,即点击Notification跳转启动到哪个Activity
            PendingIntent pendingIntent = PendingIntent.getActivity(context, UUID.randomUUID().hashCode(),
                    intent, 0);
            // 下面需兼容Android 2.x版本是的处理方式
            Notification notify1 = new Notification();
            notify1.icon = icon;
            notify1.tickerText = text;
            notify1.when = System.currentTimeMillis();
//            notify1.setLatestEventInfo(context, title,
//                    text, pendingIntent);
//            notify1.number = nunber;
            notify1.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时，通知将被清除。
            // 通过通知管理器来发起通知。如果id不同，则每click，在statubar那里增加一个提示
            manager.notify(notification_flag, notify1);
        }

    }

}
